#ifndef RANDOM_HPP
#define RANDOM_HPP

#include <random>
#include <chrono>

namespace sh
{
class RandomGenerator
{
public:
    RandomGenerator()
    {
        //使用高精度的纳秒，避免执行太快导致种子相同的情况
        engine_.seed(std::chrono::high_resolution_clock::now().time_since_epoch().count());
    }

    // 生成int类型随机数，返回范围[min, max]
    int randint(int min, int max)
    {
        std::uniform_int_distribution<int> u(min, max);
        return u(engine_);
    }

    // 生成double类型随机数，返回范围[min, max]
    double randreal(double min, double max)
    {
        std::uniform_real_distribution<double> u(min, max);
        return u(engine_);
    }

private:
    std::default_random_engine engine_;
};
}

#endif //RANDOM_HPP
